
from django import forms
from django.core.exceptions import ValidationError
from utils.BootStrapForm import BootStrapForm
from web import models
from web.forms.widgets import ColorRadioSelect

class ProjectModelForm(BootStrapForm,forms.ModelForm):
    # 重写项目描述，字段类型为text。利用插件widget的方式
    # desc = forms.CharField(widget=forms.Textarea(attrs=('xx':123)))
    bootstrap_class_exclude = ['color',] # 在父类中自定义一个列表，列表中的字段不附加样式
    class Meta:
        model = models.Project
        fields = ['name','color','desc']
        widgets = {
            'desc':forms.Textarea,
            'color':ColorRadioSelect(attrs={"class":"color-radio"}), # 添加标签的class属性，让设置的样式生效
        }
    def __init__(self,request,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.request = request

    ## 利用用户的勾子函数校验是否还有权限或者是额度来创建项目
    def clean_name(self):
        # 先判断此用户是否创建过该项目。所以不但要项目名相同而且还需要是这个用户创建的才可以
        name = self.cleaned_data.get('name')
        exists = models.Project.objects.filter(name=name,creator=self.request.tracer.user).exists()
        if exists:
            raise ValidationError('项目名已存在！')
        # 当前用户是否有额度创建项目。通过价格策略中的项目数：project_num
        # 在需要判断用户已经创建了多少个项目，通过总项目数量-已经创建的数量的结果来判定用户还有多少可使用的数量
        count = models.Project.objects.filter(creator=self.request.tracer.user).count()
        if count >= self.request.tracer.price_policy.project_num:
            raise ValidationError('创建的项目超出最大数量')
        return name




















